送到 DS 中 (送往基地台)
從 DS 傳遞過來的(從基地台收)
這個封包的傳遞需要經過 DS
兩台設備互相傳送
2312 bytes
該封包的傳遞需要透過 DS
,所以 TA 代表傳送該封包的基地台
, RA 代表要接收該封包的基地台
,而 SA 與 DA 則代表真正發送和接收該封包的設備位置,只有在封包進入到 DS 中才會需要用到 4 個 Address
如果今天要從設備 A 發送到設備 E 會有以下幾個步驟,他們會分別帶入不同的 Address
ToDS 為 1 但 FromDS 為 0
Address = AP1 , A , E , N/A
AP1 → AP3:接著會透過 DS 將封包由 AP1 送給 AP3,所以會是 ToDS 和 FromDS 都為 1
Address = AP3 , AP1 , E , A
AP3 → E:最後會由 AP3 將封包傳給設備 E,所以會是 ToDS 為 0 但 FromDS 為 1
Address = E , AP3 , A , N/A
802.11 MAC 的基本訪問方法,稱為 Carrier Sense Multiple Access with Collision Avoidance (CSMA/CA)
,由於 802.11 是在空間中傳遞封包,所以無法像 Ethernet 一樣對 Collision 進行 Detection,取而代之的是使用 Collision Avoidance
的方式盡量避免訊號 Collision。
建構在 DCF 的上方,用於提供非競爭性的服務,在這一層中每個 AP 內部會有一個清單用於記錄所有服務的設備,他會利用這個清單逐一的訪問每個設備是否有傳輸需求,如果問過一輪都沒有的話,則開放一段時間的競爭性服務,一段時間結束過後又會變會逐一訪問設備的模式,後面會有詳細的介紹。
由於 Point Coordinated 擁有較高的使用頻道的優先權,所以可以提供 contention-free
也就是免競爭的傳輸模式。
通常 DCF 與 PCF 會是並存的,這個並存的結構稱為 Superframe
,當 Superframe 開始時會先是執行一段時間的非競爭服務,會向周圍服務的設備發出輪詢,在這個過程中設備的傳輸是不需要互相競爭,這個時間稱為 contention-free burst
,輪詢的時間過後便會變成競爭型的服務,不斷地進行這個循環。
每一個 Super Frame 的時間都是不固定的,如果今天 PA 在輪詢設備的時候發現大家都不需要有即時發送的封包,那免競爭的時間就會短一些,相對的如果今天 PA 在輪詢的時候發現大多設備都有急需發送封包的需求,那麼免競爭的時間就會長一些。
利用 CSMA/CA
的 Protocol 和 random backoff time
進行 802.11 的傳輸,CSMA/CA 就如同上面介紹的一樣,在設備需要發送封包前需要先聽聽看現在的線路是否為 idle,如果是的話才可以傳輸封包,而 random backoff time 則是當今天有三台設備需要發送封包,他們同時偵測到為 idle 的時候,由於需要避免他們三個同時發送產生 Collision,所以他們三個都會各別再多等一個 random time
用於錯開彼此的發送時間。
由於 802.11 是利用空氣傳播,所以無法進行 Collision Detection,取而代之的是傳遞封包給對方時,對方一收到封包後需要立刻回傳一個 ACK
用於告訴發送方他收到了,相對的如果發送方沒有收到 ACK 的話則會再次發送封包給目標。
Carrier Sense 代表在傳送封包之前會先聽一下線路是否有其他設備在傳遞封包,這個聆聽分為兩種一種是 physical
他是真的去聆聽現在傳輸線路上是否有其他設備正在進行傳輸,另一種是 virtual mechanisms
代表當收到其他設備發出的 RTS, CTS 的時候,在他們進行傳輸的時間 ( duration field
)都將線路設定為 bussy 避免與正在傳輸的設備發生 Collision。
雖然在發送長的封包時,利用 RTS 和 CTS 可以有效的避免封包發生 Collision,但是如果今天要傳送的封包很短,那麼這種情況下在使用 RTS 和 CTS 就顯得有點浪費頻寬了,所以面對這種短的封包就會直接發送而不會使用 RTS 和 CTS。
當接收方收到發送方的封包時,如果正確的話就必須立刻回覆 Ack 給發送方,所謂的立刻回覆的時間稱為 SIFS
,當接收方收到 Data
, Poll
, Request
, Response
都需要立刻回覆 Ack。
對於 802.11 來說, Priority levels
是非常重要的事情,舉例來說當一個發送方發送了一個封包給接收方,如果沒有 Priority levels
的情況下,他可能會先處理完目前手上在做的事情後才發送 Ack 給發送方,但這樣的話發送方沒有立刻收到 Ack 就會以為這個封包傳遞失敗,所以會在傳送一次封包,這樣就會造成資源的浪費,所以有所以 802.11 定義了三種不同 Priority 的 IFS:
這個 IFS 是屬於 Priority 最高的 IFS,因為這些動作需要 盡可能地快速發送
,比如說上面提到的 Ack 如果沒有在收到的時候立刻回覆 Ack 的話,可能會造成讓發送方再送一次的情況,有三個形況會需要使用到 SIFS
當 Superframe 中的 PCF 時段(非競爭模式)
下,當 PCF 檢測到 PIFS 的時間中沒有其他設備在傳輸,那麼就會允許設備發送封包。
當在 Superframe 中的 DCF 時段(競爭模式)
下,當 DCF 檢測到 PIFS 的時間中沒有其他設備在傳輸,那麼就會允許設備發送封包,由於是競爭模式下的傳輸,所以 DIFS 的等待時間是最久的,需要等待久一點的才能盡量避免封包 Collision。
上面提到如果在 DCF 時段(競爭模式)下設備要發送封包的話,他會需要等待一個較長的 IFS 稱為 DIFS
,但今天如果有兩台設備需要傳送封包,他們同時等待了一個 DIFS 後,發現線路是 idle 的,那麼他們如果同時發送的話也會造成 Collision,所以這種情況來說當一個設備等完了 DIFS 後會需要再多等一段 Random Backoff Time
,目的就是為了避免多台設備在等完 DIFS 後同時發送而產生 Collision。
Backoff time = INT(CW * Random()) * Slot time
255
當設備 A 在 DCF 模式下要發送封包時,會需要先聽線路上是否由其他設備在發送封包,如果沒有那麼還需要再等一個 DIFS 的時間,等到這個時間過後也沒有設備在送封包的話才能發送。
而其他設備在設備 A 發送封包的時候需要等待他將封包都發送完,等到線路為 idle 後和設備 A 一樣需要多等一個 DIFS 的時間( 需要等待接收設備發送 Ack 給設備 A 以免和 Ack 發生 Collision
),等完 DIFS 後還需要多等一個 Backoff time,為了避免和其他也想發送封包的設備發生 Collision。
如果設備進入了 Backoff Time,但這時有另一台設備已經完成 Backoff Time 且開始發送封包時,那麼這台設備的 Backoff Time 就會暫時 Frozen,直到線路空閑的時間大於 DIFS 的時間才會繼續倒數 Backoff Time,當 Backoff Time 倒數到 0 後就可以開始發送封包。
當設備 A 要發送封包時,設備 B, C, D 也想發送封包,那就需要等到設備 A 發送完後等待一個 DIFS 的時間才會進行各自的 Backoff time,而設備 C 的 Backoff time 最短(10 us)最快歸零所以先由他發出封包,而其他設備就將各自的 Backoff time frozen 直到設備 C 送完封包後再等一個 DIFS 才會繼續倒數,優先倒數完的設備就可以優先發送封包,其他設備 在等待的途中偵測到有設備再送封包就必須暫時停止 Backoff 的倒數,直到等完下一次的 DIFS 後才能再次啟動
。
當一個 Station 爭取到了傳送封包的機會時,可以連續的發送多個 fragments
,有兩種情況會停止 fragments 的發送
dwell time
就會停止發送。每一個 fragment 的發送都會需要收到一個 Ack,而接收到 Ack 的時間是一個 SIFS
,同樣的當發送方收到 Ack 後也會經過一個 SIFS
後再發送下一個 fragment。
如果傳遞的資料是好幾的 fragment 的話,不可能再傳送每個 fragment 之前都在發送或接收一次 RTS 或 CTS,所以 本次傳送的 fragment 跟 ack 會成為下一輪 fragment 的 RTS/CTS
,而最後一個 fragment 和 ack 由於是最後的 data 了,所以會將 duration 設為 0。
fragment1 + Ack
的時間,在這段期間內,發送方周圍的其他設備將會在線路中偵測到 busy(紫色)。傳遞 fragment2 + Ack 的時間
,當發送方的其他設備等待完 fragment1 傳遞的 duration time 後,又會看到 fragment1 所攜帶的 duration time ( 傳遞 fragment2 的時間 ),那個他們將會繼續偵測到 busy。傳遞 fragment2 + Ack 的時間
,當接收方的其他設備等待完接收 fragment1 的 duration time 後,會在等待一個接收 fragment2 + Ack 的 duration time ( 由回傳的 Ack 所攜帶 )。duration time 會是 0
,用於告訴周遭設備這已經是最後一個 fragment,你們等待完一個 DIFS 和 backoff time 後就可以進行傳送。contention free
的服務也就是預約式的服務。Point Coordinator (PC)
,他會擁有周圍設備的清單,會依照這個清單來一一輪詢,看看有沒有哪一個工作站有封包要發送,他會產生由 Contention Free (CF) period
和 Contention Period
所組成的 Superframe(SF)
。每一段 Superframe 的長度都是不固定的, PC 會根據清單中設備的需求而延長或縮短 contention free 的時間。
在每個 Superframe 的開始的時候,PC 會利用一個 time between transmissions (PIFS)
的時間來控制每個 CF period,而當 PC 在輪詢的時候所發出給各個設備的訊號稱為 CF-Down Frame
,而如果設備被詢問到後有要發送封包的話,他將要發送的封包傳遞給 PC 的訊號就稱為 CF-UP Frame
。
當一個 Superframe 開始後, PC 會先偵測一下線路是否為 idle,如果是 diel 的話 PC 將會等待一個 PIFS
的時間,接著將會發送帶有 CF-Poll Subtype
欄位的 Data 給清單中的設備,輪詢是否有封包需要發送,當 PC 輪詢結束後會發一個 CF-End frame
用於告訴周遭設備 Contention free 的時間結束。
上面介紹到 Distributed Coordination Function 的時候有提到,每一個設備在要發送封包之前都需要等待一個 DIFS
的時間,而 Point Coordination Function 則是只要等待一個比 DIFS 短的 PIFS
的時間,所以 Point Coordination Function 的 priority 會比較高
,所以由於 PIFS 的時間比較短,所以可以比 DIFS 更快速的搶到發送的機會。
和 Distributed Coordination Function 一樣,如果設備在 Contention Free Time 中沒有要參與輪詢的話,需要先將狀態設定為 NAV
,等於說在這個 Contention Free Time 的期間內設備都不能發出訊號,為了達到這個目的則需要將 NAV 的時間設定為 maximum CF-Period length
,當輪詢結束後 PC 會發送一個 CF-End frame
告訴其他設備 Contention Free Time 的時間結束了,而 原先的定為 NAV 的設備將會 reset
自己設備的狀態,重新去偵測目前線路的狀態。
所有的 Station 在收到 PC 發出的輪詢詢問(CF-Poll)時,需要立刻回覆(SIFS)是否有需要發送封包,如果 PC 沒有收到設備回送的 CF-UP frame
的話,代表該設備不需要發送封包,那麼他會等待一個 PIFS 後接著詢問下一個設備。
當 PC 要產生 Superframe 之前會先偵測一下目前線路是否為 idle,如果是的話將會等待一個 PIFS 的時間後 發送 CF-Down frame
給第一台設備開始輪詢,第一台設備收到 PC 發送的 CF-Down frame
後如果有要發送的封包的話,需要在 SIFS
的時間發送 CF-Up frame
給 PC,反之如果 PC 沒有收到該設備的 CF-Up frame
的話,將會等待一個 PIFS 後發送 CF-Down frame
給下一台設備。
如果 PC 已經進行完輪詢的動作後,最後會發送一個 CF-End frame
告訴沒有參與輪詢的設備,目前 Contention free time 的時間結束了,其他設備收到這個訊號後將會重置各自的狀態重新聆聽線路狀態接著進路競爭時段。
當在 Contention Free Time 的時間中,當某設備被 PC 詢問到是否要發送封包的時候,不一定要將發送的封包給傳給 PC,而是可以直接傳給其他任何一個 Station,在這種情況下 接收封包的設備收到傳來的封包後,和之前介紹的一樣,需要 在 SIFS 的時間後回傳一個 Ack
告訴發送方確實有收到封包。
當 PC 發送一個 CF-Down frame
給設備 A 後,設備 A 收到 CF-Down frame
後會經過一個 SIFS 後可以選擇發送封包給設備 B,而當設備 B 收到設備 A 的封包後也 需要在一個 SIFS 之後回傳一個 Ack
給設備 A 告訴他確實收到封包了,而 PC 在這時也會偵測到來自設備 B 的 Ack ( 802.11 的傳遞方式是利用廣播 ),那麼他就會將控制權收回來,經過 SIFS 後再次發送 CF-Down frame
給下一個設備。
可以同時傳送給不同的對象
而不會發生 Collision。RTS/CTS
機制告訴周圍設備在這段期間內不要發送訊號以免發生 Collision。
Ack
機制來確保接收方有完整的收到訊號,反之若沒有發出 Ack 的話則代表發送的訊號發生 Collision。Point Coordinator (PC)
會產生一個 Superframe
,而一個 Superframe
會包含一個 Contention Free(免進爭)
和一個 Contention period(需競爭)
兩個時段,而 Contention free 所使用的 PIFS 時間比 Contention period 所使用的 DIFS 短,所以在免競爭時段中的設備會擁有較高的 Priority。國立清華大學開放式課程 - 計算機網路概論 - IEEE 802.11 無線區域網路 (Wireless LAN) (黃能富 教授)